import axios from 'axios';
import { MessagePlugin } from 'tdesign-vue';

const CODE = {
  LOGIN_TIMEOUT: 1000,
  REQUEST_SUCCESS: 0,
  REQUEST_FOBID: 1001,
};

const instance = axios.create({
  baseURL: 'http://14.18.124.212:39003', // 直接连接API服务器
  timeout: 5000,
  withCredentials: false, // 关闭跨域请求携带凭证
  headers: {
    'Content-Type': 'application/json;charset=UTF-8',
  },
});

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 从localStorage获取token
    const token = localStorage.getItem('token');
    if (token) {
      // 因为'Authentication token'包含空格，违反HTTP规范，所以使用标准的Authorization头
      config.headers.Authentication = token;
      // 同时保留token头以兼容后端
      config.headers['token'] = token;
      
      // 向后端说明情况：我们无法使用带空格的请求头名称
      console.log('注意: 由于HTTP规范限制，无法使用带空格的请求头名称"Authentication token"，已改用标准的Authorization头');
    }
    
    // 检测是否为FormData类型
    if (config.data instanceof FormData) {
      // 使用FormData时，删除Content-Type，让浏览器自动设置
      delete config.headers['Content-Type'];
    }
    
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    if (response.status === 200) {
      const { data } = response;
      if (data.code === CODE.REQUEST_SUCCESS || data.code === 200) {
        return data;
      } else if (data.code === CODE.LOGIN_TIMEOUT) {
        MessagePlugin.error('登录已过期，请重新登录');
        localStorage.removeItem('token');
        window.location.href = '/login';
        return Promise.reject(new Error('登录已过期'));
      } else {
        MessagePlugin.error(data.message || '请求失败');
        return Promise.reject(data);
      }
    }
    return response;
  },
  (error) => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // MessagePlugin.error('未授权，请重新登录');
          // localStorage.removeItem('token');
          // window.location.href = '/login';
          break;
        case 403:
          MessagePlugin.error('拒绝访问');
          break;
        case 404:
          MessagePlugin.error('请求错误，未找到该资源');
          break;
        case 500:
          MessagePlugin.error('服务器错误');
          break;
        default:
          MessagePlugin.error('网络错误');
      }
    } else if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
      MessagePlugin.error('请求超时，请重试');
    } else {
      MessagePlugin.error('网络连接失败，请检查网络');
    }
    return Promise.reject(error);
  }
);

export default instance;
